#include "StaticSequenceTable.h"

// 顺序表初始化
void SeqListInit(SeqList* psl)
{
    for(int i = 0; i < MAX_SIZE; i++)
    {
        psl->m_arr[i] = 0;
    }
    psl->m_size = 0;
}
 // 顺序表查找
int SeqListFind(SeqList* psl, SLDataType x)
{
    for(int i = 0; i < MAX_SIZE; i++)
    {
        if(psl->m_arr[i] == x)
        {
            printf("找到了，下标为：%d\n", i);
            return i;
        }
    }
    printf("没找到！\n");
    return -1;
}
// 顺序表在pos位置插入x -- 其中pos指位序，位序=下标+1
 void SeqListInsert(SeqList* psl, size_t pos, SLDataType x)
 {
    printf("在第%d个位置插入%d\n", pos, x);
    if(psl->m_size >= MAX_SIZE)
    {
        printf("满了，无法插入！\n");
        return;
    }
    // 位序则基本顺序，范围在[1, m_size+1]之间
    if(pos < 1 || pos > psl->m_size+1)
    {
        printf("插入位置不合法！\n");
        return;
    }
    // 从当前顺序表的最后一个位置开始，到pos位置结束
    for(int i = psl->m_size; i > pos-1; i--)
    {
        // 将位序为[pos, m_size]的元素往后移
        // 实际移动的元素下标范围为[pos-1, m_size-1];
        psl->m_arr[i] = psl->m_arr[i - 1];
    }
    psl->m_arr[pos-1] = x;
    printf("插入成功！\n");
    psl->m_size++;
 }
 // 顺序表删除pos位置的值
void SeqListErase(SeqList* psl, size_t pos)
{
    if(psl->m_size == 0)
    {
        printf("顺序表空了，没有元素可以删除\n");
        return;
    }
    if(pos < 1 || pos > psl->m_size)
    {
        printf("删除位置不合法！\n");
        return;
    }
    printf("删除第%d个数据\n", pos);
    for(int i = pos-1; i < psl->m_size-1; i++)
    {
        psl->m_arr[i] = psl->m_arr[i+1];
    }
    psl->m_size--;
    printf("删除成功\n");
}
 // 顺序表销毁
void SeqListDestory(SeqList* psl)
{
    printf("销毁顺序表\n");
    for(int i = 0; i < MAX_SIZE; i++)
    {
        psl->m_arr[i] = 0;
    }
    psl->m_size = 0;
    printf("顺序表销毁成功！\n");
}
 // 顺序表打印
void SeqListPrint(SeqList* psl)
{
    if(psl->m_size == 0)
    {
        printf("当前顺序表没有数据\n");
        return;
    }
    for(int i = 0; i < psl->m_size; i++)
    {
        printf("%d ", psl->m_arr[i]);
    }
    printf("\n");
}